自定义ADN接入文档

背景

通过自定义ADN方式,快速集成融合SDK暂未支持的广告平台或对应功能.

注意事项

①及时更新协议版本号为SDK支持的最新版本,否则可能无法使用。

②自定义ADN接入广告加载(load)前需要确保开发者实现了CloooudMCustomConfigAdapter协议并初始化network成功,network版本号,Adapter版本号均不能为空,否则无法加载广告。

③自定义ADN广告加载(load)成功或者失败只能调用一次。

④所有调用自定义ADN的方法均在主线程,请勿进行耗时操作。

⑤ 自定义ADN支持广告频次控制、广告间隔控制、AB测试、测试工具。

⑥自定义ADN不支持show时预加载、广告对象复用、Service bidding、多阶底价。支持Client bidding。

⑦自定义ADN广告对象的show、click等回调需确保在加载(load)广告回调之后。

⑧ SDK已经处理了Banner的轮播,自定义Banner需要禁用轮播。

支持的广告类型

目前支持的广告类型有六种,如下所示: 原生广告(Native) 开屏广告(Splash) Banner广告 激励视频广告(RewardedVideo) 全屏视频广告(FullscreenVideo) 插屏广告(Intersitial)

SDK初始化配置

协议内容

自定义Adapter必须要有配置类,在配置类中完成Adapter及对应network的信息采集,对应协议为CloooudMCustomConfigAdapter,接口实现如下所示:

方法名 参数说明 返回值 说明 是否必要
- (CloooudMCustomAdapterVersion *)basedOnCustomAdapterVersion - CloooudMCustomAdapterVersion * 用于校验Adapter使用协议版本,开发者更新Adapter时需将该值更新为Cloooud提供的最新值,该值与Cloooud要求不匹配可能影响Adapter的使用。
- (void)initializeAdapterWithConfiguration:(CloooudMSdkInitConfig *_Nullable)initConfig initConfig: 初始化配置,包括平台下发初始化配置及部分开发者传入配置 void 开发者需在该方法中完成Adapter的初始化及对应network的初始化
- (NSString *_Nonnull)adapterVersion - void 用于Cloooud获取Adapter的版本号
- (NSString *_Nonnull)networkSdkVersion - void 用于Cloooud获取network的版本号
- (void)didRequestAdPrivacyConfigUpdate:(NSDictionary *)config config: 隐私合规配置,字段详见CloooudMPrivacyConfig.h文件 void 在媒体开发者更新隐私配置时触发,初始化方法调用前一定会触发一次

示例代码

@interface CloooudMDCustomConfigAdapter : NSObject <CloooudMCustomConfigAdapter>

@end

@implementation CloooudMDCustomConfigAdapter

// 该自定义adapter是基于哪个版本实现的,填写编写时的最新值即可,Cloooud会根据该值进行兼容处理

- (CloooudMCustomAdapterVersion *)basedOnCustomAdapterVersion {

return CloooudMCustomAdapterVersion1_0;

}

// adn初始化方法
// @param initConfig 初始化配置,包括appid、appkey基本信息和部分用户传递配置

- (void)initializeAdapterWithConfiguration:(CloooudMSdkInitConfig *_Nullable)initConfig {

// 初始化network

[CloooudAdSDKManager setAppID:initConfig.appID];

// 其他配置

[CloooudAdSDKManager setThemeStatus:[self _converToPangleThemeStatus:initConfig.themeStatus]];

}

// adapter的版本号

- (NSString *_Nonnull)adapterVersion {

return @"1.0.0";

}

// adn的版本号

- (NSString *_Nonnull)networkSdkVersion {

return [CloooudAdSDKManager SDKVersion];

}

// 隐私权限更新,用户更新隐私配置时触发,初始化方法调用前一定会触发一次

- (void)didRequestAdPrivacyConfigUpdate:(NSDictionary *)config {

[[CloooudAdSDKConfiguration configuration] setPrivacyProvider:self];

}

@end

开屏广告

协议内容

自定义Splash adapter中需要实现的协议为CloooudMCustomSplashAdapter.

信息流广告

协议内容

自定义Native adapter中需要实现的协议为CloooudMCustomNativeAdapter

banner广告

协议内容

自定义Banner adapter中需要实现的协议为CloooudMCustomBannerAdapter

激励视频广告

协议内容

自定义激励视频广告 adapter中需要实现的协议为CloooudMCustomRewardedVideoAdapter

全屏视频广告

协议内容

自定义全屏视频广告 adapter中需要实现的协议为CloooudMCustomFullscreenVideoAdapter

插屏广告

协议内容

自定义全屏视频广告 adapter中需要实现的协议为CloooudMCustomInterstitialAdapter

draw广告

协议内容

自定义Draw adapter中需要实现的协议为CloooudMCustomDrawAdapter

综合比价

简介

使自定义ADN的广告加载提供实时价格反馈渠道,参与到竞价逻辑中。在一定程度上实现开发者收益最大化。

参数下发

所有广告类型在已有参数基础上,补充CloooudMAdLoadingParamBiddingType参数,该参数声明开发者在平台配置的ADN广告竞价类型:

0:普通广告

1:客户端竞价广告

100:P层数据

数据类型为NSInteger,详情请见各广告类型加载参数部分。

价格回调

参与比价的价格应通过CloooudMMediaAdLoadingExtECPM回调字段回传到SDK参与比价,该值为NSString类型,单位为分。

注意:

如ADN广告为非竞价类型,则CloooudMMediaAdLoadingExtECPM回传价格无效。

如ADN广告为竞价类型,但CloooudMMediaAdLoadingExtECPM值类型或内容错误,则无法参与比价。

比价结果通知

各广告Adapter协议中新增协议接口- (void)didReceiveBidResult:(CloooudMMediaBidResult *)result通知adapter开发者比价结果。

参数为CloooudMMediaBidResult类对象,该类中包含有竞价的结果信息,详情如下:

字段 类型 释义
win BOOL 是否在本次竞价中获胜
winnerPrice NSInteger 获胜者价格,可能为0
lossDescription NSString 竞价失败原因,竞价获胜时为nil
winnerAdnID NSString 竞价获胜者标识,可能为nil
ext NSDictionary 其他补充信息
originNativeAdData id 信息流广告时可用,用于区分信息流广告

更多信息请参考各广告Adapter协议部分。

示例参考

- (void)loadRewardedVideoAdWithSlotID:(nonnull NSString *)slotID andParameter:(nonnull NSDictionary *)parameter {

CloooudMBiddingType biddingType = [parameter[CloooudMAdLoadingParamBiddingType] integerValue];

__weak typeof(self) ws = self;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

__strong typeof(ws) self = ws;

if (biddingType != CloooudMBiddingTypeClient) {

// 模拟加载广告成功

[self.bridge rewardedVideoAd:self didLoadWithExt:@{}];

} else {

// 模拟加载广告成功

[self.bridge rewardedVideoAd:self didLoadWithExt:@{

CloooudMMediaAdLoadingExtECPM : @"100"

}];

}

// 模拟广告视频资源加载成功,可选

[self.bridge rewardedVideoAdVideoDidLoad:self];

});

}

- (void)didReceiveBidResult:(CloooudMMediaBidResult *)result {

// 在此处理Client Bidding的结果回调

}

自定义Adapter接入问题排查

添加代码位无自定义adn选项

具体流程为找到需要配置的应用->广告网络->选择对应的自定义adn->编辑自定义adn配置类名

广告无填充场景

  1. 可针对初始化代码片段进一步判断,检查是否是ADN对应初始化方法
  2. 后台填写类名是否和项目内真实情况相符
  3. 后台填写的appid和代码位id是否正确,明确是通过自定义adn接入还是自建聚合接入,自建聚合接入可忽略appid的填写,自身确保初始化部分正常执行即可
  4. 检查对应请求方法是否正确
  5. 信息流广告支持模版自渲染混出,媒体平台上针对广告类型勾选有差异,需确保勾选广告类型匹配

竞价结果回调无响应时,需明确是否进行了如下操作

  1. 需设置bidNotify为YES,默认为NO,在SDK发起广告请求创建广告对象时设置
  2. 需要回传加载成功/展示回调通知,否则无法响应

无请求成功或者失败回调或个别ADN请求不填充,只能看到某一家ADN广告是应如何排查?

  1. 该场景大概率是由于超时导致的,可检查瀑布流时长设置,延长自定义adn超时时间,一般设置为2-3s即可,修改时需注意对应总超时时间不要忘记同步调整,避免触发总超时
  2. 是否在主线程中进行耗时操作
  3. 检查对应的代码位ID是否正常
  4. 广告加载之前需要确保实现了SDK初始化且初始化成功,adn版本号,adapter版本号均不能为空,否则无法加载广告

穿山甲媒体平台提示未知错误

  1. 建议本地debug包尝试复现,在加载失败回调内输出对应错误信息反馈给技术支持同学协助定位问题
  2. 或者将具体的代码位ID,adn平台及发生日期反馈给技术支持同学进行错误排查